home *** CD-ROM | disk | FTP | other *** search
/ Mac Power 1997 December / MACPOWER-1997-12.ISO.7z / MACPOWER-1997-12.ISO / AMUG / PROGRAMMING / Raven 1.2 Examples.sit / Raven 1.2 Examples / Quill / Source / TextTraitsNode.cpp < prev    next >
Text File  |  1997-02-07  |  6KB  |  251 lines

  1. /*
  2.  *  File:       TextTraitsNode.cpp
  3.  *  Summary:       A node representing a text traits resource for use in a THierarchicalTable.
  4.  *  Written by: Jesse Jones
  5.  *
  6.  *  Copyright ゥ 1997 Jesse Jones. 
  7.  *    For conditions of distribution and use, see copyright notice in ZTypes.h  
  8.  *
  9.  *  Change History (most recent first):    
  10.  *
  11.  *         <->     1/23/96    JDJ        Created
  12.  */
  13.  
  14. #include "TextTraitsNode.h"
  15.  
  16. #include <ZHandleStream.h>
  17. #include <ZStringUtils.h>
  18. #include <ZUndoableCommand.h>
  19.  
  20. #include "TextTraitsDialog.h"
  21.  
  22.  
  23. // ===================================================================================
  24. //    Internal Functions
  25. // ===================================================================================
  26.  
  27. //---------------------------------------------------------------
  28. //
  29. // operator>> (TTextTrait)
  30. //
  31. //---------------------------------------------------------------
  32. static TInStream& operator>>(TInStream& stream, TTextTrait& value)
  33. {
  34.     if (stream.IsTagged())
  35.         VERIFY(stream.ReadTag() == 'Txtr');
  36.         
  37.     STextTrait traits;
  38.         
  39.     stream.ReadBytes(&traits, sizeof(STextTrait));
  40.     
  41.     value = traits;
  42.     
  43.     return stream;
  44. }
  45.  
  46.                 
  47. //---------------------------------------------------------------
  48. //
  49. // operator<< (TTextTrait)
  50. //
  51. //---------------------------------------------------------------
  52. static TOutStream& operator<<(TOutStream& stream, const TTextTrait& value)
  53. {
  54. #if DEBUG
  55.     if (stream.IsTagged())
  56.         stream.WriteTag('Txtr');
  57. #endif
  58.  
  59.     STextTrait record = value.GetTraits();
  60.     
  61.     stream.WriteBytes(&record, sizeof(STextTrait));
  62.     
  63.     return stream;
  64. }
  65.  
  66. #pragma mark -
  67.                 
  68. // ===================================================================================
  69. //    class CChangeTraitsCommand
  70. // ===================================================================================
  71. class CChangeTraitsCommand : public TUndoableCommand {
  72.  
  73.     typedef TUndoableCommand Inherited;
  74.  
  75. //-----------------------------------
  76. //    Initialization/Destruction
  77. //
  78. public:
  79.     virtual             ~CChangeTraitsCommand();
  80.     
  81.                         CChangeTraitsCommand(CResourceMap* rsrcMap, ResID id, const TTextTrait& newTraits);
  82.     
  83. //-----------------------------------
  84. //    Inherited API
  85. //
  86. public:
  87.     virtual string        GetText() const;
  88.  
  89. protected:
  90.     virtual void         OnDo();
  91.  
  92.     virtual void         OnUndo();
  93.  
  94.     virtual void         OnRedo();
  95.             
  96. //-----------------------------------
  97. //    Member data
  98. //
  99. protected:
  100.     CResourceMap*        mRsrcMap;
  101.     ResID                mID;
  102.     THandle                mOldData;
  103.     THandle                mNewData;
  104. };
  105.  
  106. //---------------------------------------------------------------
  107. //
  108. // CChangeTraitsCommand::~CChangeTraitsCommand
  109. //
  110. //---------------------------------------------------------------
  111. CChangeTraitsCommand::~CChangeTraitsCommand()
  112. {
  113. }
  114.  
  115.  
  116. //---------------------------------------------------------------
  117. //
  118. // CChangeTraitsCommand::CChangeTraitsCommand
  119. //
  120. //---------------------------------------------------------------
  121. CChangeTraitsCommand::CChangeTraitsCommand(CResourceMap* rsrcMap, ResID id, const TTextTrait& newTraits)
  122. {
  123.     ASSERT(rsrcMap != nil);
  124.     
  125.     mRsrcMap = rsrcMap;
  126.     mID = id;
  127.     
  128.     mOldData = mRsrcMap->GetResourceData(mID);
  129.     mOldData.Detach();
  130.     
  131.     TOutHandleStream stream;    
  132.     stream << newTraits;
  133.     mNewData = stream.GetHandle();
  134. }
  135.  
  136.  
  137. //---------------------------------------------------------------
  138. //
  139. // CChangeTraitsCommand::GetText
  140. //
  141. //---------------------------------------------------------------
  142. string CChangeTraitsCommand::GetText() const
  143. {
  144.     return LoadIndString(256, 28);
  145. }
  146.  
  147.  
  148. //---------------------------------------------------------------
  149. //
  150. // CChangeTraitsCommand::OnDo
  151. //
  152. //---------------------------------------------------------------
  153. void CChangeTraitsCommand::OnDo()
  154. {
  155.     mRsrcMap->SetResourceData(mID, mNewData);
  156. }
  157.  
  158.  
  159. //---------------------------------------------------------------
  160. //
  161. // CChangeTraitsCommand::OnUndo
  162. //
  163. //---------------------------------------------------------------
  164. void CChangeTraitsCommand::OnUndo()
  165. {
  166.     mRsrcMap->SetResourceData(mID, mOldData);
  167. }
  168.  
  169.  
  170. //---------------------------------------------------------------
  171. //
  172. // CChangeTraitsCommand::OnRedo
  173. //
  174. //---------------------------------------------------------------
  175. void CChangeTraitsCommand::OnRedo()
  176. {
  177.     mRsrcMap->SetResourceData(mID, mNewData);
  178. }
  179.  
  180. #pragma mark -
  181.  
  182. // ===================================================================================
  183. //    class CTextTraitsNode
  184. // ===================================================================================
  185.  
  186. //---------------------------------------------------------------
  187. //
  188. // CTextTraitsNode::~CTextTraitsNode
  189. //
  190. //---------------------------------------------------------------
  191. CTextTraitsNode::~CTextTraitsNode()
  192. {
  193. }
  194.  
  195.  
  196. //---------------------------------------------------------------
  197. //
  198. // CTextTraitsNode::CTextTraitsNode (THierarchicalTable*, CResourceMap*)
  199. //
  200. //---------------------------------------------------------------
  201. CTextTraitsNode::CTextTraitsNode(THierarchicalTable* table, CResourceMap* rsrcMap) : CResourceNode(table, rsrcMap)
  202. {
  203. }
  204.  
  205.               
  206. //---------------------------------------------------------------
  207. //
  208. // CTextTraitsNode::CTextTraitsNode (THierarchicalTable*, TSubNode*, CResourceMap*, ResID)
  209. //
  210. //---------------------------------------------------------------
  211. CTextTraitsNode::CTextTraitsNode(THierarchicalTable* table, TSubNode* parent, CResourceMap* rsrcMap, ResID id) : CResourceNode(table, parent, rsrcMap, id)
  212. {
  213. }
  214.  
  215.  
  216. //---------------------------------------------------------------
  217. //
  218. // CTextTraitsNode::Make
  219. //
  220. //---------------------------------------------------------------
  221. CResourceNode* CTextTraitsNode::Make(TSubNode* parent, ResID id)
  222. {
  223.     return new CTextTraitsNode(mTable, parent, mRsrcMap, id);
  224. }
  225.  
  226.  
  227. //---------------------------------------------------------------
  228. //
  229. // CTextTraitsNode::EditResource
  230. //
  231. //---------------------------------------------------------------
  232. void CTextTraitsNode::EditResource()
  233. {
  234.     TTextTrait oldTraits, newTraits;
  235.  
  236.     THandle data = mRsrcMap->GetResourceData(mID);
  237.     if (data.GetSize() > 0) {
  238.         TInHandleStream stream(data);    
  239.         
  240.         stream >> oldTraits;
  241.     }
  242.         
  243.     if (CTextTraitsDialog::Pose(mRsrcMap->GetResourceName(mID), oldTraits, &newTraits)) {
  244.         TCommand* command = new CChangeTraitsCommand(mRsrcMap, mID, newTraits);
  245.         command->Post();
  246.     }
  247. }
  248.  
  249.  
  250.  
  251.